package com.ld.admin.service.system;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Service;

import com.ld.admin.model.system.SystemUser;
import com.ld.common.service.ProjectBasicService;
import com.ld.shieldsb.dao.model.PageNavigationBean;
import com.ld.shieldsb.dao.model.QueryModel;

/**
 * 
 * 角色服务类，@Service注解用于自动注入
 * 
 * @ClassName SysRoleService
 * @author <a href="mailto:donggongai@126.com" target="_blank">吕凯</a>
 * @date 2019年03月27日 14:35:40
 *
 */
@Service
public class SysRoleService extends ProjectBasicService {

    // 用于子类覆盖，扩展doSearch方法中QueryModel的处理（标准queryModel处理完，查询进行前的处理）
    @Override
    protected QueryModel extendDealQuery(QueryModel queryModel) {
        queryModel.setOrder("sort", false); // 默认按顺序排列
        return queryModel;
    }

    // 用于子类覆盖，扩展doSearch方法中PageNavigationBean的处理（查询完成后进行）
    @Override
    protected <T> PageNavigationBean<T> extendDealPageNavigationBean(PageNavigationBean<T> pageNavigationBean) {
        return super.extendDealPageNavigationBean(pageNavigationBean);
    }

    // 删除方法子类扩展（删除完成后进行）
    @Override
    protected <T> boolean extendRemove(Boolean flag, Class<T> classOfT, String key, Object value, Integer status, Long userId) {
        return flag;
    }

    // AddOrUpdate扩展（AddOrUpdate方法完成后进行）
    @Override
    protected <T> boolean extendAddOrUpdate(Boolean flag, T modelBean, boolean update, String key, Long userId) {
        return flag;
    }

    /**
     * 
     * 获取拥有改角色的所有用户
     * 
     * @Title getRoleUserListBean
     * @author 刘金浩
     * @date 2019年7月22日 上午8:55:42
     * @param classOfT
     * @param queryModel
     * @param pageNum
     * @param pageSize
     * @return PageNavigationBean<T>
     */
    public PageNavigationBean<SystemUser> getRoleUserListBean(HttpServletRequest request, Long roleId, int pageSize) {
        QueryModel queryModel = super.getSearchQueryModel(request);
//        queryModel.addEq("roleId", roleId);
        queryModel.setOrder("createTime", true);
        int pageNum = getInt("p");
//        QueryModel linkedQueryModel = super.getNormalQueryModel();
//        linkedQueryModel.addEq(SysUserRolesModel::getUserId, 2);
        queryModel.addM2MIdLink(SystemUser.class, SystemUser::getUserRoles, roleId); // 多对多的主键关联，即查询roleId下的用户
        return super.getPageBean(request, SystemUser.class, queryModel, pageNum, pageSize);
    }
}
